iT邦幫忙

2024 iThome 鐵人賽

DAY 23
1
佛心分享-SideProject30

用 Golang 實作 streamlit 系列 第 23

Day23 App Level Cache?

  • 分享至 

  • xImage
  •  

App Level Cache 是一種存活週期與應用程式相同的快取機制。目前 ToolGUI 並不打算提供相關的 API,主要考量是:

  • Package 使用者自主性App Level Cache 的實作相對簡單,且細節眾多,交由 Package 使用者自行處理,更能符合專案的特定需求。

  • ToolGUI 設計理念: ToolGUI 將應用程式的控制權交給使用者,讓使用者能更靈活地管理應用程式狀態,包括快取機制。這與 Streamlit 直接執行 Script,需要提供較多內建功能的設計理念有所不同。

例如:

type MyApp struct {
    data sync.Map // 使用 sync.Map 儲存快取資料
}

func (app *MyApp) QueryData(key string) interface{} {
    if v, ok := app.data.Load(key); ok {
        return v
    }

    // 計算新的值
    val := calculateValue(key)

    // 將新值儲存到快取
    app.data.Store(key, val)

    return val
}

func (app *MyApp) Page1(...) {
    tgcomp.Text(app.QueryData(...))
}

App Level Cache 的更多考量:

  • 快取容量限制: 可以設定最大快取容量,並實作 LRU (Least Recently Used) 等淘汰策略,以避免記憶體耗盡。
  • 快取儲存方式: 除 sync.Map 外,還可以考慮使用 Redis、檔案等外部儲存,以提升快取的持久性或擴展性。
  • 快取資料格式: 可以使用 JSON、Protobuf 等格式序列化快取資料,以便於存儲和傳輸。

使用者可以根據上述示例,設計出符合自身需求的快取機制。


上一篇
Day22 Makefile? Taskfile!
下一篇
Day24 State Level Cache
系列文
用 Golang 實作 streamlit 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言